#ifndef COMMITFILECOMMAND_H
#define COMMITFILECOMMAND_H

#include "base_command.h"
#include <QString>
#include <QNetworkReply>
#include <QJsonObject>
#include <QJsonArray>

// CommitFileCommand 命令类
// 负责提交文件
class CommitFileCommand : public BaseCommand
{
    Q_OBJECT

public:
    explicit CommitFileCommand(QObject *parent = nullptr);
    ~CommitFileCommand();
    
    // 设置 QNetworkAccessManager 实例（重写基类方法以连接信号）
    void setNetworkAccessManager(QNetworkAccessManager *networkManager);
    
    // 执行命令
    // diskId: 网盘ID
    // folderId: 文件夹ID
    // sourceFileId: 源文件ID
    // 返回：是否成功发起请求（异步操作，实际结果通过信号通知）
    bool execute(const QString &diskId, const QString &folderId, const QString &sourceFileId);

signals:
    // 文件提交完成信号
    void commitFileCompleted(int resultCode, const QString &message);
    
    // 文件提交成功信号（用于更新文件状态）
    void commitFileSuccess(const QString &sourceFileId);

private slots:
    // 处理文件提交响应
    void handleCommitFileResponse(QNetworkReply *reply);

private:
    // 解析文件提交响应
    void parseCommitFileResponse(const QJsonObject &response);
    
    // 构建请求 URL
    QString buildRequestUrl(const QString &baseUrl, const QString &diskId, const QString &folderId, const QString &sourceFileId);
    
    // 获取用户工作目录
    QString getUserWorkBaseDir() const;

private slots:
    // 处理响应数据就绪
    void handleReadyRead();

private:
    QString m_pendingDiskId; // 待提交的网盘ID
    QString m_pendingFolderId; // 待提交的文件夹ID
    QString m_pendingSourceFileId; // 待提交的源文件ID
    QString m_currentCommitSourceFileId; // 当前提交的文件ID
    QHash<QNetworkReply*, QByteArray> m_responseData; // 存储每个reply的响应数据
};

#endif // COMMITFILECOMMAND_H

